#encoding=utf8
'''
Created on 2012-9-28

@author: Administrator
'''
import time
import os,sys

class Config(object):
    """
        全局变量类,其中常量类型为首字母代表，例如首字母为D则为字典类型
        数据类型说明：
        D        字典
        I          数字
        T        表
        S        字符串
    """
    CONFIG_KEY_STRING = "sequence_app_configure"
    
#    系统当前时间常量
    I_SYS_ZERO = 0
#    系统零常量

    I_SYS_ONE = 1
#    系统一常量

    S_SYS_NONE = None
#    系统None常量
    B_SYS_DEBUG = True
#    系统调试变量

#dsaffdfsdfs
    D_USER_DICT = {}
# [Users]
#    用户字典
#    D_USER_DICT = {
#                 "geminiblue":UserObj,
#                 }

    I_USER_STATE_ONLINE = 1
    #  用户状态  1 当前用户在线

    I_USER_STATE_OFFLINE = 0
    #  用户状态  0  当前用户离线    
    B_USER_LOGIN_OK=True
    # 用户登录成功
    B_USER_LOGIN_ERR=False
    #用户登录失败
    I_USER_GAME_STATE_OK = 1
#  用户游戏状态    1 当前用户游戏中
    I_USER_GAME_STATE_OVER = 0
#  用户游戏状态    0 当前用户被淘汰
    I_USER_GAME_STATE_SEE = 2
#  用户游戏状态    2 旁观用户，代表下局可参加游戏
    I_USER_IS_ROOM_OWNER = 1
#        当前用户是否是房主   1 为是    
    I_USER_NOT_IS_ROOM_OWNER = 0
#        当前用户是否是房主    0 为否
    I_USER_CHECK_FLAG_YES=1
#  当前用户被添加好友时是否需要验证 1 是
    I_USER_CHECK_FLAG_NO=0
#  当前用户被添加好友时是否需要验证 0 否
    I_USER_SEARCH_FLAG_NONE=0
#    无法搜索到用户
    I_USER_SEARCH_FLAG_NICKNAME=1
#    只能通过用户名搜索到用户
    I_USER_SEARCH_FLAG_USERNAME=2
#    只能通过电话搜索到
    I_USER_SEARCH_FLAG_TEL=4
#    可以通过任何条件搜索到此用户
    I_USER_SEARCH_FLAG_ALL=8
#    任何条件可搜索到
    I_USER_NOT_FOUND=1001
#    用户名错误
    I_USER_PASSWORD_ERROR=1002
#    用户密码错误
    I_USER_LOGIN_OK=1000
#    用户登录成功
    I_USER_REGISTER_OK=1010
#    用户注册成功
    I_USER_REGISTER_USERNAME_FOUND=1011
#    用户注册用户名已存在
    I_USER_REGISTER_USERNAME_ERROR=1012
#    用户注册用户名不合法
    I_USER_REGISTER_PASSWORD_ERROR=1013
#    用户注册密码不合法    
    I_USER_CHANGE_PASSWORD_OK=1020
#    用户修改密码成功
    I_USER_OLD_PASSWORD_WRONG=1021
#    用户旧密码不符
    I_USER_NICK_NAME_FOUND=1031
#    用户昵称重复
    I_USER_MODIFAN_INFO_OK=1030
#    用户修改信息成功
    I_USER_MODIFAN_INFO_ERROR=1032
#    用户修改信息失败
    D_ROOM_DICT = {}
#  [Rooms]       
#    房间字典
#D_ROOM_DICT = {
#                ''
#             }    

    I_ROOM_PRI_PUB = 0
    #  房间权限：    0  公开房间
    I_ROOM_PRI_PRO = 1
    #  房间权限：   1 私有房间

    I_ROOM_TYPE_SYSTEM = 0
    #  房间类型： 0 系统房间  
    I_ROOM_TYPE_USER = 1
    #  房间类型： 1 用户房间  

    I_ROOM_STATE_READY = 0
    #  房间状态  0 准备状态 
    I_ROOM_STATE_START = 1
    #  房间状态  1 开始状态（游戏中）
    I_ROOM_STATE_OVER = 2
    #  房间状态  2 结束状态（游戏结束） 
    I_ROOM_UP_LIMIT = 50
    #房间人数上限

    T_USER_INFO = "Sq_UserInfo"
    #  用户信息表

    T_USER_FRIENDS = "Sq_UserFriendsRelation"
    #    用户好友信息表

    T_MESSAGE = "Sq_message"
    #    消息信息表

    T_ROOMS = "Sq_room"
    #    房间信息表

    T_FEEDBACK = "Sq_Feedback"
    #    反馈信息表

    T_IDIOM = "Sq_idiom"
    #    成语信息表

    T_IDIOMLETTERS = "Sq_idiomletters"
#    成语首字信息表


    S_SEARCHFIELDS="SearchFields";
    #sql中要搜索字段的的key
    S_SEARCHCONDITION="SearchCondition";
    #sql中要搜索条件的key
    S_RESULTROW="resultRow";
    #sql中要搜索结果条目key
    S_TABLE="table";
    #sql中要搜索表的key


    CommandMap={
                "UL":"ULClass",#用户登录
                "UR":"URClass",#用户注册
                "PIS":"PISClass",
                "RI":"RIClass",
                "UPM":"UPMClass",
                "UIM":"UIMClass",
    }
#    命令类对应关系
    cfg = {
#           数据库连接配置
           "DbConnectString" :{
                                                'user': 'root',
                                                'password': '123456',
                                                'host': '192.168.11.9',
                                                'database': 'sequence',
                                                'raise_on_warnings': False, },
    
    }
    @classmethod
    def getConfig(self, keyName):
        return Config.cfg[keyName]
    @staticmethod
    def debugInfo(info):
        if(Config.B_SYS_DEBUG):
            try:
                test=sys.exc_info()
                print info
            except:
                test=sys.exc_info()
                print test
 
    @staticmethod
    def checkUserInDict(oUser):
        if ( not oUser):           
            return        
        try:
            return Config.D_USER_DICT.has_key[oUser.get_user_name()];
        except Exception,e:
            print str(e);
    @staticmethod
    def getNow():
        return  int(time.time())
    @staticmethod
    def getUserFromUserDictByUserName(UserName):
        '''
        根据用户名取得用户字典中的用户对象
        @param UserName:string 用户名
        @return: User() 
        '''
        if(Config.D_USER_DICT.has_key(UserName)):
            return Config.D_USER_DICT[UserName]
        else:
            return None
    @staticmethod
    def checkUserInDictByUserName(UserName):
        '''
        根据用户名检测用户字典中用户对象是否存在
        @param UserName:string 用户名
        @return:bool 
        '''
        return Config.D_USER_DICT.has_key[UserName];
    @staticmethod
    def getUserFromUserDictById(UserId):
        '''
        根据用户名取得用户字典中的用户对象
        @param UserId:int    用户Id
        @return: User()
        '''
        result = None
        AllUsers = Config.D_USER_DICT
        for (key,tmpUser) in AllUsers.items():
            print tmpUser
            if(tmpUser!=None):
                print tmpUser.get_user_id()
                if(str(UserId)==str(tmpUser.get_user_id())):
                    return  tmpUser
           
        return result
            
    @staticmethod        
    def addToUserDict(oUser):
        '''
        添加用户对象到字典
        '''
        if ( not oUser):           
            return
        try:
            Config.D_USER_DICT[oUser.get_user_name()] = oUser;
        except Exception,e:
            print str(e);
            
    @staticmethod
    def deleteUserFromDict(oUser):
        '''
        从用户字典中删除用户对象
        '''
        if(Config.D_USER_DICT.has_key(oUser.get_user_name())):
            del(Config.D_USER_DICT[oUser.get_user_name()])
        else:
            return
    @staticmethod
    def callSysErr(CommandId,ErrorNum):
        return "SYS#%s#%s"%(CommandId,ErrorNum)
